Lenguaje PHP

Niveles de usuarios PHP y MySQL: Ejemplo Completo

Niveles de usuarios PHP. Este tutorial le ayudara a crear inicio de sesión basado en rol de múltiples usuarios en PHP PDO y con la base de datos MySQL. Nos basaremos en una sola página de inicio de sesión y dentro de esta página se podrá elegir tres niveles: Usuarios, Personal y Administradores.

¿Cómo funciona el script Niveles de usuarios PHP?

Se utilizara un objeto de sesión diferente del nombre del rol de usuario administrador y empleado para que puedan diferenciarlo.

Si el usuario accede con sus credenciales y genera un inicio de sesión en el momento asignable nombre de objeto de sesión diferente e identifique el nombre de rol determinado.

Una vez que la sesión se crea será redirigido pasado 3 segundos a su propia página de inicio y panel  de gestión según su rol de usuario.

¿Qué es el inicio de sesión de Niveles de usuarios PHP?

Por ejemplo el rol de «usuario» inicia sesión correctamente y accede a su propia página de inicio. Sin embargo, dentro de su propia página de inicio podrá gestionar sus respectivos roles como asistencias, ventas, etc., según lo asignado.

Ahora, el rol «Administrador» cuando inicia sesión tendrá mas privilegios, como crear usuarios, eliminar usuarios y será el máximo rol dentro del sistema.

Niveles de usuarios PHP y MySQL Ejemplo Completo
Niveles de usuarios PHP y MySQL Ejemplo Completo

Niveles de usuario PHP y MySQL: Paso a Paso

A continuación, veremos una serie de pasos en el cual explicaremos cada detalle del sistema nivel de usuarios.

a) Estructura del directorio del proyecto

Como pueden apreciar les mostrare la estructura de carpetas y archivos del sistema nivel de usuarios y posee lo siguiente:

  • 8 archivos en PHP
  • Fichero conexión con la base de datos
  • Un archivo.sql
  • Librería BootStrap
Niveles de usuario PHP
Niveles de usuario PHP

b) La Base de datos / Tabla

La base de datos usara el nombre de «php_multiplelogin«. Además, dentro de esta base de datos crearemos una tabla con nombre «mainlogin«, que será el encargado de almacenar todos los usuarios con sus respectivos niveles.

Veamos las consultas del fichero «php_multilogin.sql»

CREATE TABLE `mainlogin` (
`id` int(11) NOT NULL,
`username` varchar(15) CHARACTER SET latin1 NOT NULL,
`email` varchar(40) CHARACTER SET latin1 NOT NULL,
`password` varchar(20) CHARACTER SET latin1 NOT NULL,
`role` varchar(10) CHARACTER SET latin1 NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=COMPACT;

INSERT INTO `mainlogin` (`id`, `username`, `email`, `password`, `role`) VALUES
(11, 'admin', 'demo@www.baulphp.com', '123456', 'admin'),
(12, 'test', 'test@www.baulphp.com', '123456', 'personal');

ALTER TABLE `mainlogin`
ADD PRIMARY KEY (`id`);
ALTER TABLE `mainlogin`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=15;
COMMIT;

c) Fichero DBconect.php

Como su nombre lo dice, este fichero tendrá un papel fundamental y será el encargado de vincular PHP con MySQL usando el tipo de conexión PDO que es muy recomendado para seguridad en el sistema.

<?php
$db_host="localhost"; //localhost server 
$db_user="root"; //database username
$db_password=""; //database password 
$db_name="php_multilogin"; //database name

try
{
$db=new PDO("mysql:host={$db_host};dbname={$db_name}",$db_user,$db_password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOEXCEPTION $e)
{
$e->getMessage();
}

?>

d) Fichero index.php: Formulario login

Es el fichero principal del sistema y contendrá el formulario de inicio de sesión y mostrara tres campos básicos para poder iniciar sesión como son: Correo electrónico, Contraseña y Nivel o rol de usuario. Sin embargo, el campo de rol se usara la etiqueta SELECT para forzar al usuario a elegir un rol.

<div class="login-form">
<center><h2>Iniciar sesión</h2></center>
<form method="post" class="form-horizontal">
<div class="form-group">
<label class="col-sm-6 text-left">Email</label>
<div class="col-sm-12">
<input type="text" name="txt_email" class="form-control" placeholder="Ingrese email" />
</div>
</div>

<div class="form-group">
<label class="col-sm-6 text-left">Password</label>
<div class="col-sm-12">
<input type="password" name="txt_password" class="form-control" placeholder="Ingrese passowrd" />
</div>
</div>

<div class="form-group">
<label class="col-sm-6 text-left">Seleccionar rol</label>
<div class="col-sm-12">
<select class="form-control" name="txt_role">
<option value="" selected="selected"> - selecccionar rol - </option>
<option value="admin">Admin</option>
<option value="personal">Personal</option>
<option value="usuarios">Usuarios</option>
</select>
</div>
</div>

<div class="form-group">
<div class="col-sm-12">
<input type="submit" name="btn_login" class="btn btn-success btn-block" value="Iniciar Sesion">
</div>
</div>

<div class="form-group">
<div class="col-sm-12">
¿No tienes una cuenta? <a href="registro.php"><p class="text-info">Registrar Cuenta</p></a> 
</div>
</div>

</form>
</div>

Aqui les dejare el formulario de inicio de sesión PHP:

Código index.php: Procesar el inicio de sesión

Tendra la gran responsabilidad de iniciar sesión PHP identificando el nombre, la contraseña y el rol específico seleccionado por el usuario.

Procesara en esta misma pagina si los datos ingreados son correctos para poder crear la sesion y redirigir a las diferentes paginas segun su rol.

<?php
require_once 'DBconect.php';
session_start();
if(isset($_SESSION["admin_login"])) //Condicion admin
{
header("location: admin/admin_portada.php"); 
}
if(isset($_SESSION["personal_login"])) //Condicion personal
{
header("location: personal/personal_portada.php"); 
}
if(isset($_SESSION["usuarios_login"])) //Condicion Usuarios
{
header("location: usuarios/usuarios_portada.php");
}

if(isset($_REQUEST['btn_login'])) 
{
$email =$_REQUEST["txt_email"]; //textbox nombre "txt_email"
$password =$_REQUEST["txt_password"]; //textbox nombre "txt_password"
$role =$_REQUEST["txt_role"]; //select opcion nombre "txt_role"

if(empty($email)){ 
$errorMsg[]="Por favor ingrese Email"; //Revisar email
}
else if(empty($password)){
$errorMsg[]="Por favor ingrese Password"; //Revisar password vacio
}
else if(empty($role)){
$errorMsg[]="Por favor seleccione rol "; //Revisar rol vacio
}
else if($email AND $password AND $role)
{
try
{
$select_stmt=$db->prepare("SELECT email,password,role FROM mainlogin
WHERE
email=:uemail AND password=:upassword AND role=:urole"); 
$select_stmt->bindParam(":uemail",$email);
$select_stmt->bindParam(":upassword",$password);
$select_stmt->bindParam(":urole",$role);
$select_stmt->execute(); //execute query

while($row=$select_stmt->fetch(PDO::FETCH_ASSOC)) 
{
$dbemail =$row["email"];
$dbpassword =$row["password"];
$dbrole =$row["role"];
}
if($email!=null AND $password!=null AND $role!=null) 
{
if($select_stmt->rowCount()>0)
{
if($email==$dbemail and $password==$dbpassword and $role==$dbrole)
{
switch($dbrole) //inicio de sesión de usuario base de roles
{
case "admin":
$_SESSION["admin_login"]=$email; 
$loginMsg="Admin: Inicio sesión con éxito"; 
header("refresh:3;admin/admin_portada.php"); 
break;

case "personal";
$_SESSION["personal_login"]=$email; 
$loginMsg="Personal: Inicio sesión con éxito"; 
header("refresh:3;personal/personal_portada.php"); 
break;

case "usuarios":
$_SESSION["usuarios_login"]=$email; 
$loginMsg="Usuario: Inicio sesión con éxito"; 
header("refresh:3;usuarios/usuarios_portada.php"); 
break;

default:
$errorMsg[]="correo electrónico o contraseña o rol incorrectos";
}
}
else
{
$errorMsg[]="correo electrónico o contraseña o rol incorrectos";
}
}
else
{
$errorMsg[]="correo electrónico o contraseña o rol incorrectos";
}
}
else
{
$errorMsg[]="correo electrónico o contraseña o rol incorrectos";
}
}
catch(PDOException $e)
{
$e->getMessage();
} 
}
else
{
$errorMsg[]="correo electrónico o contraseña o rol incorrectos";
}
}
include("header.php");
?>

e) Fichero registro.php

Este fichero será el encargado de mostrar un formulario HTML5 que tendrá la obligación de capturar los datos del registrante para poder almacenarlo en la base de datos.

Este formulario consta de cuatro campos que son: Nombre de usuario, correo electrónico, contraseña y rol de usuario.

Código HTML5 que muestra el formulario de registro

<div class="login-form"> 
<center><h2>Registrar</h2></center>
<form method="post" class="form-horizontal">

<div class="form-group">
<label class="col-sm-9 text-left">Usuario</label>
<div class="col-sm-12">
<input type="text" name="txt_username" class="form-control" placeholder="Ingrese usuario" />
</div>
</div>

<div class="form-group">
<label class="col-sm-9 text-left">Email</label>
<div class="col-sm-12">
<input type="text" name="txt_email" class="form-control" placeholder="Ingrese email" />
</div>
</div>

<div class="form-group">
<label class="col-sm-9 text-left">Password</label>
<div class="col-sm-12">
<input type="password" name="txt_password" class="form-control" placeholder="Ingrese password" />
</div>
</div>

<div class="form-group">
<label class="col-sm-9 text-left">Seleccione tipo</label>
<div class="col-sm-12">
<select class="form-control" name="txt_role">
<option value="" selected="selected"> - seleccione rol - </option>
<!--<option value="admin">Admin</option>-->
<option value="personal">Personal</option>
<option value="usuarios">Usuarios</option>
</select>
</div>
</div>

<div class="form-group">
<div class="col-sm-12">
<input type="submit" name="btn_register" class="btn btn-primary btn-block" value="Registro">
<!--<a href="index.php" class="btn btn-danger">Cancel</a>-->
</div>
</div>

<div class="form-group">
<div class="col-sm-12">
¿Tienes una cuenta? <a href="index.php"><p class="text-info">Inicio de sesión</p></a> 
</div>
</div>

</form>
</div><!--Cierra div login-->

Formulario de registro PHP visualmente por debajo de este tipo:

Código PHP: Proceso de formulario registro

Códigos de registro PHP responsables de almacenar el nombre de usuario, contraseña y  rol específico en la base de datos mediante la selección de nuevo usuario.
<?php
require_once "DBconect.php";
if(isset($_REQUEST['btn_register'])) //compruebe el nombre del botón "btn_register" y configúrelo
{
$username = $_REQUEST['txt_username']; //input nombre "txt_username"
$email = $_REQUEST['txt_email']; //input nombre "txt_email"
$password = $_REQUEST['txt_password']; //input nombre "txt_password"
$role = $_REQUEST['txt_role']; //seleccion nombre "txt_role"

if(empty($username)){
$errorMsg[]="Ingrese nombre de usuario"; //Compruebe input nombre de usuario no vacío
}
else if(empty($email)){
$errorMsg[]="Ingrese email"; //Revisar email input no vacio
}
else if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
$errorMsg[]="Ingrese email valido"; //Verificar formato de email
}
else if(empty($password)){
$errorMsg[]="Ingrese password"; //Revisar password vacio o nulo
}
else if(strlen($password) < 6){
$errorMsg[] = "Password minimo 6 caracteres"; //Revisar password 6 caracteres
}
else if(empty($role)){
$errorMsg[]="Seleccione rol"; //Revisar etiqueta select vacio
}
else
{ 
try
{ 
$select_stmt=$db->prepare("SELECT username, email FROM mainlogin 
WHERE username=:uname OR email=:uemail"); // consulta sql
$select_stmt->bindParam(":uname",$username); 
$select_stmt->bindParam(":uemail",$email); //parámetros de enlace
$select_stmt->execute();
$row=$select_stmt->fetch(PDO::FETCH_ASSOC); 
if($row["username"]==$username){
$errorMsg[]="Usuario ya existe"; //Verificar usuario existente
}
else if($row["email"]==$email){
$errorMsg[]="Email ya existe"; //Verificar email existente
}

else if(!isset($errorMsg))
{
$insert_stmt=$db->prepare("INSERT INTO mainlogin(username,email,password,role) VALUES(:uname,:uemail,:upassword,:urole)"); //Consulta sql de insertar 
$insert_stmt->bindParam(":uname",$username); 
$insert_stmt->bindParam(":uemail",$email); //parámetros de enlace 
$insert_stmt->bindParam(":upassword",$password);
$insert_stmt->bindParam(":urole",$role);

if($insert_stmt->execute())
{
$registerMsg="Registro exitoso: Esperar página de inicio de sesión"; //Ejecuta consultas 
header("refresh:2;index.php"); //Actualizar despues de 2 segundo a la portada
}
}
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}
}
include("header.php");
?>

f) Fichero admin_portada.php

Una vez que el rol «Administrador» inicia sesión será redirigido a esta página que estará hecha para fines administrativos con diferentes permisos.

<body>
<?php include("../header.php");?>

<div class="wrapper">
<div class="container">
<div class="col-lg-12">
<center>
<h1>Pagina Administrativa</h1>
<h3>
<?php
session_start();

if(!isset($_SESSION['admin_login'])) 
{
header("location: ../index.php"); 
}

if(isset($_SESSION['personal_login'])) 
{
header("location: ../personal/personal_portada.php"); 
}

if(isset($_SESSION['usuarios_login'])) 
{
header("location: ../usuarios/usuarios_portada.php");
}

if(isset($_SESSION['admin_login']))
{
?>
Bienvenido, <?php echo $_SESSION['admin_login']; } ?>
</h3>

</center>
<a href="../cerrar_sesion.php"><button class="btn btn-danger text-left"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> Cerrar Sesion</button></a>
<hr>
</div>

<br><br><br>
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
Panel de usuarios
</div>
<!-- /.panel-heading -->
<div class="panel-body">
<div class="table-responsive">
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th width="4%">ID</th>
<th width="18%">Usuario</th>
<th width="24%">Email</th>
<th width="19%">Rol</th>
<th width="24%">Password</th>
<th colspan="2">Opciones</th>
</tr>
</thead>
<tbody>
<?php
require_once '../DBconect.php';
$select_stmt=$db->prepare("SELECT id,username,email,role FROM mainlogin");
$select_stmt->execute();

while($row=$select_stmt->fetch(PDO::FETCH_ASSOC))
{
?>
<tr>
<td><?php echo $row["id"]; ?></td>
<td><?php echo $row["username"]; ?></td>
<td><?php echo $row["email"]; ?></td>
<td><?php echo $row["role"]; ?></td>
<td>*******</td>
<td width="4%"><button class="btn btn-primary"><span class="glyphicon glyphicon-edit" aria-hidden="true"></span></button></td>
<td width="7%"><button class="btn btn-danger"><span class="glyphicon glyphicon-trash" aria-hidden="true"></span></button></td>
</tr>
<?php 
}
?>
</tbody>
</table>
</div>
<!-- /.table-responsive -->
</div>
<!-- /.panel-body -->
</div>
<!-- /.panel -->
</div>
</div>
</div>
</body>

g) Fichero cerrar_sesion.php

Si cualquier usuario que desea salir del sistema y cerrar sesión correctamente con el objeto de sesión, deben hacer clic en el enlace de cierre de sesión llamado «Cerrar sesión«. Por lo tanto, en ese momento el método «session_destroy()» destruye el objeto de sesión y se envían a la página de inicio de sesión.

<?php
session_start();
header("location:index.php");
// Destruye la sesion actual
session_destroy();
?>

Otros archivos: Niveles de usuarios PHP

I) DBconect.php – En este archivo establecer la conexión de la base de datos desde PHP.

II) Registro.php (formulario de registro) – Nuevo usuario (admin/personal/usuario) se está registrando en este archivo.

III) Admin_portada.php – En este archivo sólo se permite el nombre del rol de administrador.

IV) Personal_portada.php – En este archivo sólo se permite el nombre del rol de administrador de empleados. Este almacén de archivos en la carpeta de empleados.

V) Usuarios_portada.php – en este archivo sólo se permite el nombre del rol de administrador de usuario. Este almacén de archivos en la carpeta de usuario.

CONCLUSION DEL ARTÍCULO

En este artículo hemos aprendido a iniciar sesión con diferentes roles de usuarios usando PHP y MySQL. Además, estos usuarios dispondrán de diferentes permisos para poder gestionar la información del sistema web.

También, se aplicó la conexión recomendada con MySQL, estamos hablando de PHP PDO.

Espero que este ejemplo les ayude en sus proyectos web que estén realizando.

DESCARGAR CODIGO FUENTE

Descargar

 

Mostrar más

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.
Botón volver arriba
Esta web utiliza cookies propias para su correcto funcionamiento. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad